﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.IO;
using MAntLibrary;

namespace MAnt3.dll
{
    class Heureka:IDodavatel
    {
        #region Property
        public string nextLine = "\r\n";
        string[] _DostupnostNazevArr = new string[] { "Skladem", "Není Skladem" };

        private IOproudy ioproudy;
        public IOproudy Ioproudy
        {
            get
            {
                return ioproudy;
            }
            set
            {
                ioproudy = value;
            }
        }

        public string[] GetDostupnostNazev()
        {
            return _DostupnostNazevArr;
        }
        public List<string> XXXtestXXX;
        #endregion

        #region Constructor
        public Heureka(IOproudy io)
        {
            Ioproudy = io;
            XXXtestXXX = new List<string>();
        }
        #endregion

        public List<ZboziNetDirect> CtiXml(XmlNode root, FileInfo file, Dodavatel dodavatel)
        {
            // nactu cislo pozice pokud je potreba
            int counter = 0;
            if (Ioproudy.ulozeno) { counter = Ioproudy.pozice; }
            List<ZboziNetDirect> result = new List<ZboziNetDirect>();
            ZboziNetDirect zbozi;

            // pruchod vnorenymi uzly korenoveho elementu
            foreach (XmlNode lNode in root.ChildNodes)
            {
                // popreskakuju pokud byl nacten rozpracovany soubor
                if (Ioproudy.ulozeno && counter > 0)
                {
                    counter--;
                    continue;
                }

                zbozi = new ZboziNetDirect();
                if (lNode.Name.Equals("SHOPITEM"))
                {
                    //ted jsem v uzlu SHOPITEM a zpracuju jednotlive hodnoty
                    XmlNodeList deti = lNode.ChildNodes;
                    counter++;
                    foreach (XmlNode d in deti)
                    {
                        if (d.Name.Equals("PRODUCT")) { zbozi.JmenoVyrobku = d.InnerText; continue; }
                        if (d.Name.Equals("DESCRIPTION"))
                        {
                            zbozi.Popis = d.InnerText;
                            zbozi.KratkyPopis = d.InnerText;
                            continue;
                        }
                        if (d.Name.Equals("DELIVERY_DATE")) { zbozi.Delivery_date = d.InnerText; continue; }
                        if (d.Name.Equals("TOLLFREE")) { zbozi.TollFree = d.InnerText; continue; }
                        if (d.Name.Equals("IMGURL")) { zbozi.JmenoObrazku = d.InnerText; continue; }
                        if (d.Name.Equals("PRICE")) { zbozi.PuvodniCena = d.InnerText; zbozi.setNovaCena(dodavatel.SlevaProDodavatele); continue; }
                        if (d.Name.Equals("CATEGORYTEXT"))
                        {
                            Kategorie temp = new Kategorie( d.InnerText.Split('|'));

                            zbozi.Kategorie.Id = temp.Id;
                            zbozi.Kategorie.JmenoKategorie = temp.JmenoKategorie;
                            zbozi.Kategorie.PoradiKategorie = temp.PoradiKategorie;

                            XXXtestXXX.Add(temp.Id+"-"+temp.JmenoKategorie +"\n"+ d.InnerText);

                            continue; 
                        }
                    }

                }
                result.Add(zbozi);
            }

            // aktualizuji pocet polozek
            //MainWindow.PocetPolozek = MainWindow.NactenySeznam.Count;
            return result;
        }

        public string ZobrazInformace(List<ZboziNetDirect> list, int pocitadlo)
        {
            string temp = string.Empty;
            temp = XXXtestXXX[pocitadlo];
            return temp;
        }

        public void UlozData(List<ZboziNetDirect> list, int pocitadlo, ref ZboziNetDirect noveZbozi)
        {
            noveZbozi.Delivery_date = list[pocitadlo - 1].Delivery_date;
        }

        public void GenerujParametry(string path, string znacka, List<ZboziNetDirect> list, string timeStamp)
        {
            string filename = "\\" + znacka + "-" + "Parametry" + "-" + timeStamp + ".xml";
            FileStream fs = new FileStream(path + filename, FileMode.Create);
            XmlWriterSettings settings = new XmlWriterSettings();
            settings.Indent = true;

            XmlWriter w = XmlWriter.Create(fs, settings);

            w.WriteStartDocument();
            w.WriteStartElement("parametry");
            w.WriteAttributeString("manufacturer", "netdirect");
            w.WriteAttributeString("version", "09.01");
            w.WriteAttributeString("bVlozit", "1");
            w.WriteAttributeString("bOpravit", "1");
            w.WriteAttributeString("bKompletniXml", "1");
            w.WriteAttributeString("sIdZbozi", "sKodZbozi");

            //cyklus
            for (int i = 0; i < list.Count; i++)
            {
                // ROZMERY
                w.WriteStartElement("zaznam");

                w.WriteElementString("sJmenoParametru", "rozměry (v x š x h)");

                w.WriteElementString("sJednotkaParametru", "cm");
                w.WriteElementString("sPopisParametru", "rozměr nábytku");
                w.WriteElementString("sIdZbozi", list[i].IdZbozi);

                // Hodnota parametru
                string temp = list[i].Height + " x " + list[i].Width + " x " + list[i].Length;
                if (string.IsNullOrEmpty(temp))
                {
                    w.WriteElementString("sHodnotaParametru", " "); //100-bila
                }
                else
                {
                    w.WriteElementString("sHodnotaParametru", temp); //100-bila
                }

                w.WriteElementString("bVypnout", "0");

                w.WriteElementString("bHlavniHodnota", "1"); //1
                w.WriteElementString("nPoradiZobrazeniParametru", "100");

                w.WriteElementString("nPoradiZobrazeniHodnoty", "1"); //1
                w.WriteElementString("bVyberovyParametr", "1");

                w.WriteEndElement();

                // BARVY
                w.WriteStartElement("zaznam");

                w.WriteElementString("sJmenoParametru", "barvy");

                w.WriteElementString("sJednotkaParametru", " ");
                w.WriteElementString("sPopisParametru", "barva nábytku");
                w.WriteElementString("sIdZbozi", list[i].IdZbozi);




                // Hodnota parametru
                temp = list[i].Color;
                if (string.IsNullOrEmpty(temp))
                {
                    w.WriteElementString("sHodnotaParametru", " "); //100-bila
                }
                else
                {
                    w.WriteElementString("sHodnotaParametru", list[i].Color); //100-bila
                }







                w.WriteElementString("bVypnout", "0");

                w.WriteElementString("bHlavniHodnota", "1"); //1
                w.WriteElementString("nPoradiZobrazeniParametru", "100");

                w.WriteElementString("nPoradiZobrazeniHodnoty", "1"); //1
                w.WriteElementString("bVyberovyParametr", "1");

                w.WriteEndElement();

                // BARVY DETAIL
                w.WriteStartElement("zaznam");

                w.WriteElementString("sJmenoParametru", "barvy - detail");

                w.WriteElementString("sJednotkaParametru", " ");
                w.WriteElementString("sPopisParametru", "detail barvy nábytku");
                w.WriteElementString("sIdZbozi", list[i].IdZbozi);



                // Hodnota parametru
                temp = list[i].Color_detail;
                if (string.IsNullOrEmpty(temp))
                {
                    w.WriteElementString("sHodnotaParametru", " "); //100-bila
                }
                else
                {
                    w.WriteElementString("sHodnotaParametru", list[i].Color_detail); //100-bila
                }





                w.WriteElementString("bVypnout", "0");

                w.WriteElementString("bHlavniHodnota", "1"); //1
                w.WriteElementString("nPoradiZobrazeniParametru", "100");

                w.WriteElementString("nPoradiZobrazeniHodnoty", "1"); //1
                w.WriteElementString("bVyberovyParametr", "1");

                w.WriteEndElement();

                // MATERIAL
                w.WriteStartElement("zaznam");

                w.WriteElementString("sJmenoParametru", "materiály");

                w.WriteElementString("sJednotkaParametru", " ");
                w.WriteElementString("sPopisParametru", "materiál nábytku");
                w.WriteElementString("sIdZbozi", list[i].IdZbozi);


                // Hodnota parametru
                temp = list[i].Material;
                if (string.IsNullOrEmpty(temp))
                {
                    w.WriteElementString("sHodnotaParametru", " "); //100-bila
                }
                else
                {
                    w.WriteElementString("sHodnotaParametru", list[i].Material); //100-bila
                }




                w.WriteElementString("bVypnout", "0");

                w.WriteElementString("bHlavniHodnota", "1"); //1
                w.WriteElementString("nPoradiZobrazeniParametru", "100");

                w.WriteElementString("nPoradiZobrazeniHodnoty", "1"); //1
                w.WriteElementString("bVyberovyParametr", "1");

                w.WriteEndElement();

                // TYP
                w.WriteStartElement("zaznam");

                w.WriteElementString("sJmenoParametru", "typ");

                w.WriteElementString("sJednotkaParametru", " ");
                w.WriteElementString("sPopisParametru", "typ nábytku");
                w.WriteElementString("sIdZbozi", list[i].IdZbozi);



                // Hodnota parametru
                temp = list[i].Room;
                if (string.IsNullOrEmpty(temp))
                {
                    w.WriteElementString("sHodnotaParametru", " "); //100-bila
                }
                else
                {
                    w.WriteElementString("sHodnotaParametru", list[i].Room); //100-bila
                }




                w.WriteElementString("bVypnout", "0");

                w.WriteElementString("bHlavniHodnota", "1"); //1
                w.WriteElementString("nPoradiZobrazeniParametru", "100");

                w.WriteElementString("nPoradiZobrazeniHodnoty", "1"); //1
                w.WriteElementString("bVyberovyParametr", "1");

                w.WriteEndElement();
            }

            w.WriteEndElement();
            w.WriteEndDocument();
            w.Flush();
            fs.Close();
        }

        public void VytvorXML(string destinationPath, string jmenoDodavatele, List<ZboziNetDirect> UpravenySeznam)
        {
            throw new NotImplementedException();
        }
    }
}
